package com.hongshan.wallet.util

/**
 * Copyright Zhangxx.
 * Copyright (c) 2019
 * All rights reserved
 *
 * @project  : Wallet
 * @package  : com.example.wallet.util
 * @author   : zhangxx
 * @date     : 2019/4/12
 * @email    : qq957413212@hotmail.com
 * @desc     : //TODO
 */


import java.security.MessageDigest
import java.security.NoSuchAlgorithmException

/**
 * Created by Lovell on 16/6/28.
 */
object EncryptUtils {

    /**
     * 用MD5算法进行加密
     * @param str 需要加密的字符串
     * @return MD5加密后的结果
     */
    fun encodeMD5String(str: String?): String? {
        return encode(str, "MD5")
    }

    /**
     * 用SHA算法进行加密
     * @param str 需要加密的字符串
     * @return SHA加密后的结果
     */
    fun encodeSHAString(str: String): String? {
        return encode(str, "SHA")
    }

//    /**
//     * 用base64算法进行加密
//     * @param str 需要加密的字符串
//     * @return base64加密后的结果
//     */
//    fun encodeBase64String(str: String): String {
//        val encoder = BASE64Encoder()
//        return encoder.encode(str.toByteArray())
//    }
//
//    /**
//     * 用base64算法进行解密
//     * @param str 需要解密的字符串
//     * @return base64解密后的结果
//     * @throws IOException
//     */
//    @Throws(IOException::class)
//    fun decodeBase64String(str: String): String {
//        val encoder = BASE64Decoder()
//        return String(encoder.decodeBuffer(str))
//    }

    private fun encode(str: String?, method: String): String? {
        if (str == null) return null
        return try {
            val md = MessageDigest.getInstance(method)
            val digest = md.digest(str.toByteArray())
            val sb = StringBuffer()
            for (b in digest) {
                //获取低八位有效值
                val i :Int = b.toInt() and 0xff
                //将整数转化为16进制
                var hexString = Integer.toHexString(i)
                if (hexString.length < 2) {
                    //如果是一位的话，补0
                    hexString = "0$hexString"
                }
                sb.append(hexString)
            }
            sb.toString()
        } catch (e: NoSuchAlgorithmException) {
            e.printStackTrace()
            null
        }
    }
}